package com.codeying.utils;

import com.codeying.entity.*;
import com.codeying.service.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import java.util.Date;

/**
* 数据库连接工具
*/
public class JdbcUtils {
        //mysql需要修改的配置有： ip改成localhost，mysql用户名密码
    private static final String driverClass="com.mysql.cj.jdbc.Driver";
    private static final String url="jdbc:mysql://localhost:3306/web_car_rental?serverTimezone=GMT%2B8&characterEncoding=utf-8&allowPublicKeyRetrieval=true&useSSL=false";
    private static final String username="web_car_rental";//自行修改用户名和密码
    private static final String password="web_car_rental";


    /**
    * 测试能否连接成功
    */
    public static void main(String[] args) {
        AdminService sv = new AdminService();
        List<Admin> list = sv.list();
        System.out.println("数据库连接成功！");
        System.out.println("获取到 " + list.size() + "条 管理员的数据");
    }

    private static Connection con ;
    private static long timeNow;
    static{  // 静态代码块,只会被执行一次
        try{
            Class.forName(driverClass);//加载数据库连接的驱动
            con = DriverManager.getConnection(url, username, password);//创建连接
            timeNow = new Date().getTime();
        }catch(Exception ex){
            ex.printStackTrace();
            throw new RuntimeException("数据库连接失败");//连接失败则抛错
        }
    }

    /**
    * 获取连接
    */
    public static Connection getConnection(){
        //连接关闭了则重新连接
        try {
            if(new Date().getTime() - 180000 > timeNow){ //3分钟重新或者一次数据库连接
                timeNow = new Date().getTime();
                con.close();
                con = DriverManager.getConnection(url, username, password);//创建连接
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return con;
    }

    /**
     * 获取分页sql语句
     * @param sql
     * @param pageIndex
     * @param pageSize
     * @return
     */
    public static String getPageSql(String sql,Integer pageIndex,Integer pageSize){
        //这个情况不分页
        if(pageIndex == null || pageIndex < 1 || pageSize == null){
            return sql;
        }
        pageIndex = pageIndex - 1;
        StringBuilder res = new StringBuilder(sql);
        if(!JdbcUtils.driverClass.contains("sqlserver")){//my sqlite
            res.append(" limit ").append(pageIndex * pageSize).append(",").append(pageSize);
        }else {//sql
            if(!sql.contains("order by") ){
                res.append(" order by id ");
            }
            //TODO 提示： 如果是Sqlserver2008 则删掉下面这一行！因为Sqlserver2008不支持这个语法。
            res.append(" offset ").append(pageIndex * pageSize).append(" rows fetch next ").append(pageSize).append(" rows only");
        }
        return res.toString();
    }
}

